const createError = require('http-errors')
const multer = require('multer');

/**
 * 请求成功
 * @param {*} res 
 * @param {*} message 
 * @param {*} data 
 * @param {*} code 
 */
function success(res,message,data={},code = 200){
    res.status(code).json({
        status:true,
        message,
        data
    })
}

/**
 * 请求失败
 * @param {*} res 
 * @param {*} error 
 * @returns 
 */
function failure(res,error){
    // 默认响应为500，服务器错误
    let statusCode = 500
    let errors = "服务器错误"
    if(error.name == 'SequelizeValidationError'){
        // 表单验证错误，因为表单的验证错误可能是多个，所以得用循环来处理
        statusCode = 400;
        errors = error.errors.map(e=> e.message);
    }else if(error.name ==='JSONWebTokenError' || error.name ==='TokenExpiredError'){
        statusCode = 401;
        errors = '您提交的token错误或已过期'
    }else if(error instanceof createError.HttpError){
        statusCode = error.status
        errors = error.message
    }else if(error instanceof multer.MulterError){
        // 验证如果尺寸过大，就413错误提示信息。413是用来提示文件过大最适合的状态码
        if(error.code == 'LIMIT_FILE_SIZE'){
            statusCode = 413
            errors = '文件大小超出限制。'
        }else{
            statusCode = 400;
            errors = error.message
        }
    }
    res.status(statusCode).json({
        status:false,
        message:`请求失败：${error.name}`,
        errors:Array.isArray(errors)?errors:[errors]
    })
}

module.exports = {
    success,
    failure
}